package com.yeyi.ytest.date;


import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;

public class CalendarTest {
    /**
     * 以一种较为友好的方式格式化日期时间值
     *
     * @param c
     * 日期时间对象
     * @return 格式化后的日期时间字符串
     */
    public static String toFriendlyString(Calendar c) {
        if (c != null) {
            DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss.SSS");
            return df.format(c.getTime());
        }
        return null;
    }
    
    public static void getCalendar(){
        Calendar c = Calendar.getInstance();
        System.out.println("当前时刻：" + toFriendlyString(c));
        System.out.println();
        System.out.println("属性名称：Calendar.AM_PM");
        System.out.println("代表含义：上下午标识，上午返回Calendar.AM=0，下午返回Calendar.PM=1");
        System.out.println("测试结果：" + c.get(Calendar.AM_PM));
        System.out.println();
        System.out.println("属性名称：Calendar.DATE");
        System.out.println("代表含义：一个月中的第几天，同Calendar.DAY_OF_MONTH");
        System.out.println("测试结果：" + c.get(Calendar.DATE));
        System.out.println();
        System.out.println("属性名称：Calendar.DAY_OF_MONTH");
        System.out.println("代表含义：一个月中的第几天，同Calendar.DATE");
        System.out.println("测试结果：" + c.get(Calendar.DAY_OF_MONTH));
        System.out.println();
        System.out.println("属性名称：Calendar.DAY_OF_WEEK");
        System.out.println("代表含义：一周中的第几天，对应星期几，第一天为星期日，于此类推。");
        System.out.println("星期日:Calendar.SUNDAY=1");
        System.out.println("星期一:Calendar.MONDAY=2");
        System.out.println("星期二:Calendar.TUESDAY=3");
        System.out.println("星期三:Calendar.WEDNESDAY=4");
        System.out.println("星期四:Calendar.THURSDAY=5");
        System.out.println("星期五:Calendar.FRIDAY=6");
        System.out.println("星期六:Calendar.SATURDAY=7");
        System.out.println("测试结果：" + c.get(Calendar.DAY_OF_WEEK));
        System.out.println();
        System.out.println("属性名称：Calendar.DAY_OF_WEEK_IN_MONTH");
        System.out.println("代表含义：这一天所对应的星期几在该月中是第几次出现");
        System.out.println("测试结果：" + c.get(Calendar.DAY_OF_WEEK_IN_MONTH));
        System.out.println();
        System.out.println("属性名称：Calendar.DAY_OF_YEAR");
        System.out.println("代表含义：一年中的第几天");
        System.out.println("测试结果：" + c.get(Calendar.DAY_OF_YEAR));
        System.out.println();
        System.out.println("属性名称：Calendar.HOUR");
        System.out.println("代表含义：12小时制下的小时数，中午和午夜表示为0");
        System.out.println("测试结果：" + c.get(Calendar.HOUR));
        System.out.println();
        System.out.println("属性名称：Calendar.HOUR_OF_DAY");
        System.out.println("代表含义：24小时制下的小时数，午夜表示为0");
        System.out.println("测试结果：" + c.get(Calendar.HOUR_OF_DAY));
        System.out.println();
        System.out.println("属性名称：Calendar.MILLISECOND");
        System.out.println("代表含义：毫秒数");
        System.out.println("测试结果：" + c.get(Calendar.MILLISECOND));
        System.out.println();
        System.out.println("属性名称：Calendar.MINUTE");
        System.out.println("代表含义：分钟");
        System.out.println("测试结果：" + c.get(Calendar.MINUTE));
        System.out.println();
        System.out.println("属性名称：Calendar.MONTH");
        System.out.println("代表含义：月份，从0到11表示12个月份，比实际月份值小1");
        System.out.println("测试结果：" + c.get(Calendar.MONTH));
        System.out.println();
        System.out.println("属性名称：Calendar.SECOND");
        System.out.println("代表含义：秒");
        System.out.println("测试结果：" + c.get(Calendar.SECOND));
        System.out.println();
        System.out.println("属性名称：Calendar.WEEK_OF_MONTH");
        System.out.println("代表含义：一个月中的第几个星期");
        System.out.println("测试结果：" + c.get(Calendar.WEEK_OF_MONTH));
        System.out.println();
        System.out.println("属性名称：Calendar.WEEK_OF_YEAR");
        System.out.println("代表含义：一年中的第几个星期");
        System.out.println("测试结果：" + c.get(Calendar.WEEK_OF_YEAR));
        System.out.println();
        System.out.println("属性名称：Calendar.YEAR");
        System.out.println("代表含义：年份");
        System.out.println("测试结果：" + c.get(Calendar.YEAR));
    }
    
    public static void main(String[] args) {
        getCalendar();
    }
}
//其中Calendar.DAY_OF_WEEK_IN_MONTH代表的含义比较难理解一些，它表示“这一天所对应的星期几在该
//月中是第几次出现”。比如2008年8月8日是星期五，在它之前的8月1日也是星期五，因此它是8月份的第二个
//星期五。所以这时调用get(Calendar.DAY_OF_WEEK_IN_MONTH)就会返回2。这里存在一个简单易记的规
//律：对于每月的1-7号，它们一定占全了星期一到星期日，所以不管是它们中的哪一天，也不管这一天是星期
//几，它总是第一个，因此返回1；8-14号也同样占全了星期一到星期日，但由于1-7号的关系，对于它们总是返
//回2；以此类推，15-21号返回3，22-28号返回4，29-31号返回5

